package controllers;

import java.util.*;

import play.mvc.*;
import play.data.*;
import static play.data.Form.*;
import play.*;

import views.html.disciplinas.*;

import models.*;

public class Disciplinas extends Controller {
	/**
     * Rediraciona diretamente para a pagina inicial
     */
    public static Result GO_DISCIPLINAS = redirect(
        routes.Disciplinas.list(0, "descricao", "asc", "")
    );
    
    /**
     * Redireciona uma requisicao padrao para a lista de temas
     */
    public static Result index() {
        return GO_DISCIPLINAS;
    }

    /**
     * Mostra lista de disciplinas paginada
     *
     * @param page Numero da pagina atual (comecando em  0)
     * @param sortBy Coluna atraves da qual dados estao sendo ordenados
     * @param order Tipo de ordenacao  (asc ou desc)
     * @param filter Filtro aplicado
     */
    public static Result list(int page, String sortBy, String order, String filter) {
        return ok(
        	list.render(
                Disciplina.page(page, 10, sortBy, order, filter),
                sortBy, order, filter
            )
        );
    }
    
    /**
     * Mostra o form para edicao de tema
     *
     * @param id Id do tema a ser editado
     */
    public static Result edit(Long id) {
        Form<Disciplina> disciplinaForm = form(Disciplina.class).fill(
            Disciplina.find.byId(id)
        );
        return ok(
            editForm.render(id, disciplinaForm)
        );
    }
    
    /**
     * Trata submissao do form de edicao
     *
     * @param id Id do tema a ser editado
     */
    public static Result update(Long id) {
        Form<Disciplina> disciplinaForm = form(Disciplina.class).bindFromRequest();
        if(disciplinaForm.hasErrors()) {
            return badRequest(editForm.render(id, disciplinaForm));
        }
        disciplinaForm.get().update(id);
        flash("success", "Disciplina " + disciplinaForm.get().descricao + " has been updated");
        return GO_DISCIPLINAS;
    }
    
    /**
     * Mostra forma para inserir novo tema
     */
    public static Result create() {
        Form<Disciplina> disciplinaForm = form(Disciplina.class);
        return ok(
            createForm.render(disciplinaForm)
        );
    }
    
    /**
     * Trata submissao form de insercao
     */
    public static Result save() {
        Form<Disciplina> disciplinaForm = form(Disciplina.class).bindFromRequest();
        if(disciplinaForm.hasErrors()) {
            return badRequest(createForm.render(disciplinaForm));
        }
        disciplinaForm.get().save();
        flash("success", "Disciplina " + disciplinaForm.get().descricao + " cadastrado com sucesso");
        return GO_DISCIPLINAS;
    }
    
    /**
     * Trata remocao de tema
     */
    public static Result delete(Long id) {
        Disciplina.find.ref(id).delete();
        flash("success", "Disciplina has been deleted");
        return GO_DISCIPLINAS;
    }
}